package com.yuantu.judiciary.model.domain;

import com.yuantu.judiciary.model.BaseDO;
import com.yuantu.judiciary.model.enums.OrganizationType;
import com.yuantu.judiciary.model.enums.PayState;
import lombok.Data;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.math.BigDecimal;
import java.sql.Timestamp;

/**
 * 组织使用记录表
 *
 * @author syw
 * @since 2023-06-12
 **/
@Data
@Entity
@DynamicUpdate
@Table(name = "vip_order")
public class VipOrderDO extends BaseDO {

    /**
     * 套餐id
     */
    @Comment("套餐id")
    private Long vipId;

    /**
     * 套餐名称
     */
    @Comment("套餐名称")
    private String vipName;

    /**
     * 组织id
     */
    @Comment("组织id")
    private Long organizationId;

    /**
     * 交易单号
     */
    @Comment("交易单号")
    private String tradeNo;

    /**
     * 预付单号
     */
    @Comment("预付单号")
    private String prepayId;

    /**
     * 支付时间
     */
    @Comment("支付时间")
    private Timestamp payTime;

    /**
     * 总价
     */
    @Comment("总价")
    private Double totalPrice;

    /**
     * 小程序微信支付 订单/交易状态，枚举值：
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（仅付款码支付会返回）
     * USERPAYING：用户支付中（仅付款码支付会返回）
     * PAYERROR：支付失败（仅付款码支付会返回）
     * ---------------------------------------------------------
     * APP支付宝支付 订单/交易状态，枚举值：
     * WAIT_BUYER_PAY：交易创建,等待买家付款
     * TRADE_CLOSED：未付款交易超时关闭,或支付完成后全额退款
     * TRADE_SUCCESS：交易支付成功
     * TRADE_FINISHED：交易结束，不可退款
     */
    @Comment("状态")
    private String state;

    /**
     * 过期时间
     */
    @Comment("过期时间")
    private Timestamp expiresTime;

    /**
     * 支付状态
     */
    @Enumerated(EnumType.STRING)
    @Column(length = 20, nullable = false)
    @Comment("支付状态")
    private PayState payState;

    /**
     * 组织类型
     */
    @Enumerated(EnumType.STRING)
    @Column(length = 50, nullable = false)
    @Comment("组织类型")
    private OrganizationType orgType;

    @Comment("优惠码id")
    private Long discountCodeId;

    @Comment("历史分")
    private Double historyScore;

    @Comment("可查询次数")
    private Integer searchTimes;

    /**
     * 是否开具发票
     */
    @Comment("是否开具发票")
    @Column(name = "is_invoice", nullable = false)
    private Boolean isInvoice = Boolean.FALSE;
}
